package org.xtext.example.mydsl.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.xtext.example.mydsl.services.MyDslGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@SuppressWarnings("all")
public class InternalMyDslParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_VARIABLE", "RULE_TVAR", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'Types{'", "';'", "'}'", "'Declarations{'", "'Main{'", "'import'", "'='", "'let'", "':'", "'in'", "'\\\\('", "').'", "'('", "')'", "'/\\\\'", "'.'", "'['", "']'", "'->'", "'forall'"
    };
    public static final int RULE_ID=5;
    public static final int T__29=29;
    public static final int T__28=28;
    public static final int RULE_TVAR=7;
    public static final int T__27=27;
    public static final int T__26=26;
    public static final int T__25=25;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=12;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=10;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=9;
    public static final int T__30=30;
    public static final int T__19=19;
    public static final int T__31=31;
    public static final int RULE_STRING=4;
    public static final int T__32=32;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int RULE_VARIABLE=6;
    public static final int T__17=17;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=8;
    public static final int RULE_WS=11;

    // delegates
    // delegators


        public InternalMyDslParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalMyDslParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalMyDslParser.tokenNames; }
    public String getGrammarFileName() { return "../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g"; }



    /*
      This grammar contains a lot of empty actions to work around a bug in ANTLR.
      Otherwise the ANTLR tool will create synpreds that cannot be compiled in some rare cases.
    */
     
     	private MyDslGrammarAccess grammarAccess;
     	
        public InternalMyDslParser(TokenStream input, MyDslGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Prog";	
       	}
       	
       	@Override
       	protected MyDslGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleProg"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:73:1: entryRuleProg returns [EObject current=null] : iv_ruleProg= ruleProg EOF ;
    public final EObject entryRuleProg() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleProg = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:74:2: (iv_ruleProg= ruleProg EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:75:2: iv_ruleProg= ruleProg EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getProgRule()); 
            }
            pushFollow(FOLLOW_ruleProg_in_entryRuleProg81);
            iv_ruleProg=ruleProg();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleProg; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleProg91); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleProg"


    // $ANTLR start "ruleProg"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:82:1: ruleProg returns [EObject current=null] : ( ( (lv_importList_0_0= ruleImport ) )? (otherlv_1= 'Types{' ( ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';' )* otherlv_4= '}' )? (otherlv_5= 'Declarations{' ( ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';' )* otherlv_8= '}' )? otherlv_9= 'Main{' ( (lv_main_10_0= ruleTerm ) ) otherlv_11= '}' ) ;
    public final EObject ruleProg() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        EObject lv_importList_0_0 = null;

        EObject lv_td_2_0 = null;

        EObject lv_d_6_0 = null;

        EObject lv_main_10_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:85:28: ( ( ( (lv_importList_0_0= ruleImport ) )? (otherlv_1= 'Types{' ( ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';' )* otherlv_4= '}' )? (otherlv_5= 'Declarations{' ( ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';' )* otherlv_8= '}' )? otherlv_9= 'Main{' ( (lv_main_10_0= ruleTerm ) ) otherlv_11= '}' ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:86:1: ( ( (lv_importList_0_0= ruleImport ) )? (otherlv_1= 'Types{' ( ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';' )* otherlv_4= '}' )? (otherlv_5= 'Declarations{' ( ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';' )* otherlv_8= '}' )? otherlv_9= 'Main{' ( (lv_main_10_0= ruleTerm ) ) otherlv_11= '}' )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:86:1: ( ( (lv_importList_0_0= ruleImport ) )? (otherlv_1= 'Types{' ( ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';' )* otherlv_4= '}' )? (otherlv_5= 'Declarations{' ( ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';' )* otherlv_8= '}' )? otherlv_9= 'Main{' ( (lv_main_10_0= ruleTerm ) ) otherlv_11= '}' )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:86:2: ( (lv_importList_0_0= ruleImport ) )? (otherlv_1= 'Types{' ( ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';' )* otherlv_4= '}' )? (otherlv_5= 'Declarations{' ( ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';' )* otherlv_8= '}' )? otherlv_9= 'Main{' ( (lv_main_10_0= ruleTerm ) ) otherlv_11= '}'
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:86:2: ( (lv_importList_0_0= ruleImport ) )?
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==18) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:87:1: (lv_importList_0_0= ruleImport )
                    {
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:87:1: (lv_importList_0_0= ruleImport )
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:88:3: lv_importList_0_0= ruleImport
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getProgAccess().getImportListImportParserRuleCall_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleImport_in_ruleProg137);
                    lv_importList_0_0=ruleImport();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getProgRule());
                      	        }
                             		add(
                             			current, 
                             			"importList",
                              		lv_importList_0_0, 
                              		"Import");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:104:3: (otherlv_1= 'Types{' ( ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';' )* otherlv_4= '}' )?
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==13) ) {
                alt3=1;
            }
            switch (alt3) {
                case 1 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:104:5: otherlv_1= 'Types{' ( ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';' )* otherlv_4= '}'
                    {
                    otherlv_1=(Token)match(input,13,FOLLOW_13_in_ruleProg151); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getProgAccess().getTypesKeyword_1_0());
                          
                    }
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:108:1: ( ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';' )*
                    loop2:
                    do {
                        int alt2=2;
                        int LA2_0 = input.LA(1);

                        if ( (LA2_0==RULE_ID) ) {
                            alt2=1;
                        }


                        switch (alt2) {
                    	case 1 :
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:108:2: ( (lv_td_2_0= ruleTypeDich ) ) otherlv_3= ';'
                    	    {
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:108:2: ( (lv_td_2_0= ruleTypeDich ) )
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:109:1: (lv_td_2_0= ruleTypeDich )
                    	    {
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:109:1: (lv_td_2_0= ruleTypeDich )
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:110:3: lv_td_2_0= ruleTypeDich
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getProgAccess().getTdTypeDichParserRuleCall_1_1_0_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleTypeDich_in_ruleProg173);
                    	    lv_td_2_0=ruleTypeDich();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getProgRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"td",
                    	              		lv_td_2_0, 
                    	              		"TypeDich");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }

                    	    otherlv_3=(Token)match(input,14,FOLLOW_14_in_ruleProg185); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_3, grammarAccess.getProgAccess().getSemicolonKeyword_1_1_1());
                    	          
                    	    }

                    	    }
                    	    break;

                    	default :
                    	    break loop2;
                        }
                    } while (true);

                    otherlv_4=(Token)match(input,15,FOLLOW_15_in_ruleProg199); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getProgAccess().getRightCurlyBracketKeyword_1_2());
                          
                    }

                    }
                    break;

            }

            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:134:3: (otherlv_5= 'Declarations{' ( ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';' )* otherlv_8= '}' )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==16) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:134:5: otherlv_5= 'Declarations{' ( ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';' )* otherlv_8= '}'
                    {
                    otherlv_5=(Token)match(input,16,FOLLOW_16_in_ruleProg214); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getProgAccess().getDeclarationsKeyword_2_0());
                          
                    }
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:138:1: ( ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';' )*
                    loop4:
                    do {
                        int alt4=2;
                        int LA4_0 = input.LA(1);

                        if ( (LA4_0==RULE_ID) ) {
                            alt4=1;
                        }


                        switch (alt4) {
                    	case 1 :
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:138:2: ( (lv_d_6_0= ruleDich ) ) otherlv_7= ';'
                    	    {
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:138:2: ( (lv_d_6_0= ruleDich ) )
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:139:1: (lv_d_6_0= ruleDich )
                    	    {
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:139:1: (lv_d_6_0= ruleDich )
                    	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:140:3: lv_d_6_0= ruleDich
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getProgAccess().getDDichParserRuleCall_2_1_0_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleDich_in_ruleProg236);
                    	    lv_d_6_0=ruleDich();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getProgRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"d",
                    	              		lv_d_6_0, 
                    	              		"Dich");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }

                    	    otherlv_7=(Token)match(input,14,FOLLOW_14_in_ruleProg248); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_7, grammarAccess.getProgAccess().getSemicolonKeyword_2_1_1());
                    	          
                    	    }

                    	    }
                    	    break;

                    	default :
                    	    break loop4;
                        }
                    } while (true);

                    otherlv_8=(Token)match(input,15,FOLLOW_15_in_ruleProg262); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_8, grammarAccess.getProgAccess().getRightCurlyBracketKeyword_2_2());
                          
                    }

                    }
                    break;

            }

            otherlv_9=(Token)match(input,17,FOLLOW_17_in_ruleProg276); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_9, grammarAccess.getProgAccess().getMainKeyword_3());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:168:1: ( (lv_main_10_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:169:1: (lv_main_10_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:169:1: (lv_main_10_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:170:3: lv_main_10_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getProgAccess().getMainTermParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleProg297);
            lv_main_10_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getProgRule());
              	        }
                     		set(
                     			current, 
                     			"main",
                      		lv_main_10_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_11=(Token)match(input,15,FOLLOW_15_in_ruleProg309); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_11, grammarAccess.getProgAccess().getRightCurlyBracketKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleProg"


    // $ANTLR start "entryRuleImport"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:198:1: entryRuleImport returns [EObject current=null] : iv_ruleImport= ruleImport EOF ;
    public final EObject entryRuleImport() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleImport = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:199:2: (iv_ruleImport= ruleImport EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:200:2: iv_ruleImport= ruleImport EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getImportRule()); 
            }
            pushFollow(FOLLOW_ruleImport_in_entryRuleImport345);
            iv_ruleImport=ruleImport();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleImport; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleImport355); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleImport"


    // $ANTLR start "ruleImport"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:207:1: ruleImport returns [EObject current=null] : (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) ) ;
    public final EObject ruleImport() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_importURI_1_0=null;

         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:210:28: ( (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:211:1: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:211:1: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:211:3: otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) )
            {
            otherlv_0=(Token)match(input,18,FOLLOW_18_in_ruleImport392); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getImportAccess().getImportKeyword_0());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:215:1: ( (lv_importURI_1_0= RULE_STRING ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:216:1: (lv_importURI_1_0= RULE_STRING )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:216:1: (lv_importURI_1_0= RULE_STRING )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:217:3: lv_importURI_1_0= RULE_STRING
            {
            lv_importURI_1_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleImport409); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_importURI_1_0, grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getImportRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"importURI",
                      		lv_importURI_1_0, 
                      		"STRING");
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleImport"


    // $ANTLR start "entryRuleDich"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:241:1: entryRuleDich returns [EObject current=null] : iv_ruleDich= ruleDich EOF ;
    public final EObject entryRuleDich() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDich = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:242:2: (iv_ruleDich= ruleDich EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:243:2: iv_ruleDich= ruleDich EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDichRule()); 
            }
            pushFollow(FOLLOW_ruleDich_in_entryRuleDich450);
            iv_ruleDich=ruleDich();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDich; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDich460); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDich"


    // $ANTLR start "ruleDich"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:250:1: ruleDich returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) ) ) ;
    public final EObject ruleDich() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        EObject lv_term_2_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:253:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:254:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:254:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:254:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_term_2_0= ruleTerm ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:254:2: ( (lv_name_0_0= RULE_ID ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:255:1: (lv_name_0_0= RULE_ID )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:255:1: (lv_name_0_0= RULE_ID )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:256:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDich502); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_0_0, grammarAccess.getDichAccess().getNameIDTerminalRuleCall_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getDichRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_0_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,19,FOLLOW_19_in_ruleDich519); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getDichAccess().getEqualsSignKeyword_1());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:276:1: ( (lv_term_2_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:277:1: (lv_term_2_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:277:1: (lv_term_2_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:278:3: lv_term_2_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getDichAccess().getTermTermParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleDich540);
            lv_term_2_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getDichRule());
              	        }
                     		set(
                     			current, 
                     			"term",
                      		lv_term_2_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDich"


    // $ANTLR start "entryRuleNrif"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:302:1: entryRuleNrif returns [EObject current=null] : iv_ruleNrif= ruleNrif EOF ;
    public final EObject entryRuleNrif() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNrif = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:303:2: (iv_ruleNrif= ruleNrif EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:304:2: iv_ruleNrif= ruleNrif EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNrifRule()); 
            }
            pushFollow(FOLLOW_ruleNrif_in_entryRuleNrif576);
            iv_ruleNrif=ruleNrif();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNrif; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleNrif586); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNrif"


    // $ANTLR start "ruleNrif"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:311:1: ruleNrif returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ;
    public final EObject ruleNrif() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;

         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:314:28: ( ( (otherlv_0= RULE_ID ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:315:1: ( (otherlv_0= RULE_ID ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:315:1: ( (otherlv_0= RULE_ID ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:316:1: (otherlv_0= RULE_ID )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:316:1: (otherlv_0= RULE_ID )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:317:3: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {
               
              		  /* */ 
              		
            }
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getNrifRule());
              	        }
                      
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleNrif634); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_0, grammarAccess.getNrifAccess().getNomeDichCrossReference_0()); 
              	
            }

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNrif"


    // $ANTLR start "entryRuleTerm"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:339:1: entryRuleTerm returns [EObject current=null] : iv_ruleTerm= ruleTerm EOF ;
    public final EObject entryRuleTerm() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTerm = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:340:2: (iv_ruleTerm= ruleTerm EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:341:2: iv_ruleTerm= ruleTerm EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTermRule()); 
            }
            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm669);
            iv_ruleTerm=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTerm; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm679); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTerm"


    // $ANTLR start "ruleTerm"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:348:1: ruleTerm returns [EObject current=null] : (this_Var_0= ruleVar | this_Abs_1= ruleAbs | this_App_2= ruleApp | this_Uq_3= ruleUq | this_Tapp_4= ruleTapp | this_Nrif_5= ruleNrif | this_Let_6= ruleLet ) ;
    public final EObject ruleTerm() throws RecognitionException {
        EObject current = null;

        EObject this_Var_0 = null;

        EObject this_Abs_1 = null;

        EObject this_App_2 = null;

        EObject this_Uq_3 = null;

        EObject this_Tapp_4 = null;

        EObject this_Nrif_5 = null;

        EObject this_Let_6 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:351:28: ( (this_Var_0= ruleVar | this_Abs_1= ruleAbs | this_App_2= ruleApp | this_Uq_3= ruleUq | this_Tapp_4= ruleTapp | this_Nrif_5= ruleNrif | this_Let_6= ruleLet ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:352:1: (this_Var_0= ruleVar | this_Abs_1= ruleAbs | this_App_2= ruleApp | this_Uq_3= ruleUq | this_Tapp_4= ruleTapp | this_Nrif_5= ruleNrif | this_Let_6= ruleLet )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:352:1: (this_Var_0= ruleVar | this_Abs_1= ruleAbs | this_App_2= ruleApp | this_Uq_3= ruleUq | this_Tapp_4= ruleTapp | this_Nrif_5= ruleNrif | this_Let_6= ruleLet )
            int alt6=7;
            switch ( input.LA(1) ) {
            case RULE_VARIABLE:
                {
                alt6=1;
                }
                break;
            case 23:
                {
                alt6=2;
                }
                break;
            case 25:
                {
                alt6=3;
                }
                break;
            case 27:
                {
                alt6=4;
                }
                break;
            case 29:
                {
                alt6=5;
                }
                break;
            case RULE_ID:
                {
                alt6=6;
                }
                break;
            case 20:
                {
                alt6=7;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;
            }

            switch (alt6) {
                case 1 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:353:2: this_Var_0= ruleVar
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getVarParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleVar_in_ruleTerm729);
                    this_Var_0=ruleVar();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Var_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:366:2: this_Abs_1= ruleAbs
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getAbsParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbs_in_ruleTerm759);
                    this_Abs_1=ruleAbs();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Abs_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:379:2: this_App_2= ruleApp
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getAppParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleApp_in_ruleTerm789);
                    this_App_2=ruleApp();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_App_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:392:2: this_Uq_3= ruleUq
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getUqParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleUq_in_ruleTerm819);
                    this_Uq_3=ruleUq();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Uq_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 5 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:405:2: this_Tapp_4= ruleTapp
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getTappParserRuleCall_4()); 
                          
                    }
                    pushFollow(FOLLOW_ruleTapp_in_ruleTerm849);
                    this_Tapp_4=ruleTapp();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Tapp_4; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 6 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:418:2: this_Nrif_5= ruleNrif
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getNrifParserRuleCall_5()); 
                          
                    }
                    pushFollow(FOLLOW_ruleNrif_in_ruleTerm879);
                    this_Nrif_5=ruleNrif();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Nrif_5; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 7 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:431:2: this_Let_6= ruleLet
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTermAccess().getLetParserRuleCall_6()); 
                          
                    }
                    pushFollow(FOLLOW_ruleLet_in_ruleTerm909);
                    this_Let_6=ruleLet();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Let_6; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTerm"


    // $ANTLR start "entryRuleLet"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:450:1: entryRuleLet returns [EObject current=null] : iv_ruleLet= ruleLet EOF ;
    public final EObject entryRuleLet() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLet = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:451:2: (iv_ruleLet= ruleLet EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:452:2: iv_ruleLet= ruleLet EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLetRule()); 
            }
            pushFollow(FOLLOW_ruleLet_in_entryRuleLet944);
            iv_ruleLet=ruleLet();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLet; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleLet954); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLet"


    // $ANTLR start "ruleLet"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:459:1: ruleLet returns [EObject current=null] : (otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) ) ) ;
    public final EObject ruleLet() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_var_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_type_3_0 = null;

        EObject lv_t1_5_0 = null;

        EObject lv_t2_7_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:462:28: ( (otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:463:1: (otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:463:1: (otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:463:3: otherlv_0= 'let' ( (lv_var_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= '=' ( (lv_t1_5_0= ruleTerm ) ) otherlv_6= 'in' ( (lv_t2_7_0= ruleTerm ) )
            {
            otherlv_0=(Token)match(input,20,FOLLOW_20_in_ruleLet991); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getLetAccess().getLetKeyword_0());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:467:1: ( (lv_var_1_0= RULE_VARIABLE ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:468:1: (lv_var_1_0= RULE_VARIABLE )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:468:1: (lv_var_1_0= RULE_VARIABLE )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:469:3: lv_var_1_0= RULE_VARIABLE
            {
            lv_var_1_0=(Token)match(input,RULE_VARIABLE,FOLLOW_RULE_VARIABLE_in_ruleLet1008); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_var_1_0, grammarAccess.getLetAccess().getVarVariableTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getLetRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"var",
                      		lv_var_1_0, 
                      		"variable");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,21,FOLLOW_21_in_ruleLet1025); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getLetAccess().getColonKeyword_2());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:489:1: ( (lv_type_3_0= ruleT ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:490:1: (lv_type_3_0= ruleT )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:490:1: (lv_type_3_0= ruleT )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:491:3: lv_type_3_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLetAccess().getTypeTParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleLet1046);
            lv_type_3_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLetRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_3_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,19,FOLLOW_19_in_ruleLet1058); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getLetAccess().getEqualsSignKeyword_4());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:511:1: ( (lv_t1_5_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:512:1: (lv_t1_5_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:512:1: (lv_t1_5_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:513:3: lv_t1_5_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLetAccess().getT1TermParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleLet1079);
            lv_t1_5_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLetRule());
              	        }
                     		set(
                     			current, 
                     			"t1",
                      		lv_t1_5_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_6=(Token)match(input,22,FOLLOW_22_in_ruleLet1091); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getLetAccess().getInKeyword_6());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:533:1: ( (lv_t2_7_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:534:1: (lv_t2_7_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:534:1: (lv_t2_7_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:535:3: lv_t2_7_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLetAccess().getT2TermParserRuleCall_7_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleLet1112);
            lv_t2_7_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLetRule());
              	        }
                     		set(
                     			current, 
                     			"t2",
                      		lv_t2_7_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLet"


    // $ANTLR start "entryRuleVar"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:559:1: entryRuleVar returns [EObject current=null] : iv_ruleVar= ruleVar EOF ;
    public final EObject entryRuleVar() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleVar = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:560:2: (iv_ruleVar= ruleVar EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:561:2: iv_ruleVar= ruleVar EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getVarRule()); 
            }
            pushFollow(FOLLOW_ruleVar_in_entryRuleVar1148);
            iv_ruleVar=ruleVar();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleVar; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleVar1158); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleVar"


    // $ANTLR start "ruleVar"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:568:1: ruleVar returns [EObject current=null] : ( (lv_name_0_0= RULE_VARIABLE ) ) ;
    public final EObject ruleVar() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:571:28: ( ( (lv_name_0_0= RULE_VARIABLE ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:572:1: ( (lv_name_0_0= RULE_VARIABLE ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:572:1: ( (lv_name_0_0= RULE_VARIABLE ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:573:1: (lv_name_0_0= RULE_VARIABLE )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:573:1: (lv_name_0_0= RULE_VARIABLE )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:574:3: lv_name_0_0= RULE_VARIABLE
            {
            lv_name_0_0=(Token)match(input,RULE_VARIABLE,FOLLOW_RULE_VARIABLE_in_ruleVar1199); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_0_0, grammarAccess.getVarAccess().getNameVariableTerminalRuleCall_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getVarRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_0_0, 
                      		"variable");
              	    
            }

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleVar"


    // $ANTLR start "entryRuleAbs"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:598:1: entryRuleAbs returns [EObject current=null] : iv_ruleAbs= ruleAbs EOF ;
    public final EObject entryRuleAbs() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbs = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:599:2: (iv_ruleAbs= ruleAbs EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:600:2: iv_ruleAbs= ruleAbs EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbsRule()); 
            }
            pushFollow(FOLLOW_ruleAbs_in_entryRuleAbs1239);
            iv_ruleAbs=ruleAbs();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbs; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbs1249); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbs"


    // $ANTLR start "ruleAbs"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:607:1: ruleAbs returns [EObject current=null] : (otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) ) ) ;
    public final EObject ruleAbs() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_param_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_type_3_0 = null;

        EObject lv_body_5_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:610:28: ( (otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:611:1: (otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:611:1: (otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:611:3: otherlv_0= '\\\\(' ( (lv_param_1_0= RULE_VARIABLE ) ) otherlv_2= ':' ( (lv_type_3_0= ruleT ) ) otherlv_4= ').' ( (lv_body_5_0= ruleTerm ) )
            {
            otherlv_0=(Token)match(input,23,FOLLOW_23_in_ruleAbs1286); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getAbsAccess().getReverseSolidusLeftParenthesisKeyword_0());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:615:1: ( (lv_param_1_0= RULE_VARIABLE ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:616:1: (lv_param_1_0= RULE_VARIABLE )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:616:1: (lv_param_1_0= RULE_VARIABLE )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:617:3: lv_param_1_0= RULE_VARIABLE
            {
            lv_param_1_0=(Token)match(input,RULE_VARIABLE,FOLLOW_RULE_VARIABLE_in_ruleAbs1303); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_param_1_0, grammarAccess.getAbsAccess().getParamVariableTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbsRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"param",
                      		lv_param_1_0, 
                      		"variable");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,21,FOLLOW_21_in_ruleAbs1320); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAbsAccess().getColonKeyword_2());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:637:1: ( (lv_type_3_0= ruleT ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:638:1: (lv_type_3_0= ruleT )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:638:1: (lv_type_3_0= ruleT )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:639:3: lv_type_3_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAbsAccess().getTypeTParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleAbs1341);
            lv_type_3_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAbsRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_3_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,24,FOLLOW_24_in_ruleAbs1353); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getAbsAccess().getRightParenthesisFullStopKeyword_4());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:659:1: ( (lv_body_5_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:660:1: (lv_body_5_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:660:1: (lv_body_5_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:661:3: lv_body_5_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAbsAccess().getBodyTermParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleAbs1374);
            lv_body_5_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAbsRule());
              	        }
                     		set(
                     			current, 
                     			"body",
                      		lv_body_5_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbs"


    // $ANTLR start "entryRuleApp"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:685:1: entryRuleApp returns [EObject current=null] : iv_ruleApp= ruleApp EOF ;
    public final EObject entryRuleApp() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleApp = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:686:2: (iv_ruleApp= ruleApp EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:687:2: iv_ruleApp= ruleApp EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAppRule()); 
            }
            pushFollow(FOLLOW_ruleApp_in_entryRuleApp1410);
            iv_ruleApp=ruleApp();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleApp; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleApp1420); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleApp"


    // $ANTLR start "ruleApp"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:694:1: ruleApp returns [EObject current=null] : (otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) ) ) ;
    public final EObject ruleApp() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject lv_t1_1_0 = null;

        EObject lv_t2_3_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:697:28: ( (otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:698:1: (otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:698:1: (otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:698:3: otherlv_0= '(' ( (lv_t1_1_0= ruleTerm ) ) otherlv_2= ')' ( (lv_t2_3_0= ruleTerm ) )
            {
            otherlv_0=(Token)match(input,25,FOLLOW_25_in_ruleApp1457); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getAppAccess().getLeftParenthesisKeyword_0());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:702:1: ( (lv_t1_1_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:703:1: (lv_t1_1_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:703:1: (lv_t1_1_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:704:3: lv_t1_1_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAppAccess().getT1TermParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleApp1478);
            lv_t1_1_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAppRule());
              	        }
                     		set(
                     			current, 
                     			"t1",
                      		lv_t1_1_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,26,FOLLOW_26_in_ruleApp1490); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAppAccess().getRightParenthesisKeyword_2());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:724:1: ( (lv_t2_3_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:725:1: (lv_t2_3_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:725:1: (lv_t2_3_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:726:3: lv_t2_3_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAppAccess().getT2TermParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleApp1511);
            lv_t2_3_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAppRule());
              	        }
                     		set(
                     			current, 
                     			"t2",
                      		lv_t2_3_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleApp"


    // $ANTLR start "entryRuleUq"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:750:1: entryRuleUq returns [EObject current=null] : iv_ruleUq= ruleUq EOF ;
    public final EObject entryRuleUq() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUq = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:751:2: (iv_ruleUq= ruleUq EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:752:2: iv_ruleUq= ruleUq EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUqRule()); 
            }
            pushFollow(FOLLOW_ruleUq_in_entryRuleUq1547);
            iv_ruleUq=ruleUq();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUq; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleUq1557); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUq"


    // $ANTLR start "ruleUq"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:759:1: ruleUq returns [EObject current=null] : (otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) ) ) ;
    public final EObject ruleUq() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_var_1_0=null;
        Token otherlv_2=null;
        EObject lv_term_3_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:762:28: ( (otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:763:1: (otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:763:1: (otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:763:3: otherlv_0= '/\\\\' ( (lv_var_1_0= RULE_TVAR ) ) otherlv_2= '.' ( (lv_term_3_0= ruleTerm ) )
            {
            otherlv_0=(Token)match(input,27,FOLLOW_27_in_ruleUq1594); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getUqAccess().getSolidusReverseSolidusKeyword_0());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:767:1: ( (lv_var_1_0= RULE_TVAR ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:768:1: (lv_var_1_0= RULE_TVAR )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:768:1: (lv_var_1_0= RULE_TVAR )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:769:3: lv_var_1_0= RULE_TVAR
            {
            lv_var_1_0=(Token)match(input,RULE_TVAR,FOLLOW_RULE_TVAR_in_ruleUq1611); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_var_1_0, grammarAccess.getUqAccess().getVarTvarTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getUqRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"var",
                      		lv_var_1_0, 
                      		"tvar");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,28,FOLLOW_28_in_ruleUq1628); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getUqAccess().getFullStopKeyword_2());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:789:1: ( (lv_term_3_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:790:1: (lv_term_3_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:790:1: (lv_term_3_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:791:3: lv_term_3_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getUqAccess().getTermTermParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleUq1649);
            lv_term_3_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getUqRule());
              	        }
                     		set(
                     			current, 
                     			"term",
                      		lv_term_3_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUq"


    // $ANTLR start "entryRuleTapp"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:815:1: entryRuleTapp returns [EObject current=null] : iv_ruleTapp= ruleTapp EOF ;
    public final EObject entryRuleTapp() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTapp = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:816:2: (iv_ruleTapp= ruleTapp EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:817:2: iv_ruleTapp= ruleTapp EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTappRule()); 
            }
            pushFollow(FOLLOW_ruleTapp_in_entryRuleTapp1685);
            iv_ruleTapp=ruleTapp();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTapp; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTapp1695); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTapp"


    // $ANTLR start "ruleTapp"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:824:1: ruleTapp returns [EObject current=null] : ( ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) ) ) ;
    public final EObject ruleTapp() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject lv_term_1_0 = null;

        EObject lv_type_3_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:827:28: ( ( ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:828:1: ( ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:828:1: ( ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:828:2: ( ( '[' )=>otherlv_0= '[' ) ( (lv_term_1_0= ruleTerm ) ) otherlv_2= ']' ( (lv_type_3_0= ruleT ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:828:2: ( ( '[' )=>otherlv_0= '[' )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:828:3: ( '[' )=>otherlv_0= '['
            {
            otherlv_0=(Token)match(input,29,FOLLOW_29_in_ruleTapp1740); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getTappAccess().getLeftSquareBracketKeyword_0());
                  
            }

            }

            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:833:2: ( (lv_term_1_0= ruleTerm ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:834:1: (lv_term_1_0= ruleTerm )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:834:1: (lv_term_1_0= ruleTerm )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:835:3: lv_term_1_0= ruleTerm
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getTappAccess().getTermTermParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleTerm_in_ruleTapp1762);
            lv_term_1_0=ruleTerm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getTappRule());
              	        }
                     		set(
                     			current, 
                     			"term",
                      		lv_term_1_0, 
                      		"Term");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,30,FOLLOW_30_in_ruleTapp1774); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getTappAccess().getRightSquareBracketKeyword_2());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:855:1: ( (lv_type_3_0= ruleT ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:856:1: (lv_type_3_0= ruleT )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:856:1: (lv_type_3_0= ruleT )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:857:3: lv_type_3_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getTappAccess().getTypeTParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleTapp1795);
            lv_type_3_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getTappRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_3_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTapp"


    // $ANTLR start "entryRuleT"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:881:1: entryRuleT returns [EObject current=null] : iv_ruleT= ruleT EOF ;
    public final EObject entryRuleT() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleT = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:882:2: (iv_ruleT= ruleT EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:883:2: iv_ruleT= ruleT EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTRule()); 
            }
            pushFollow(FOLLOW_ruleT_in_entryRuleT1831);
            iv_ruleT=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleT; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleT1841); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleT"


    // $ANTLR start "ruleT"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:890:1: ruleT returns [EObject current=null] : (this_T1_0= ruleT1 | this_T2_1= ruleT2 | this_T3_2= ruleT3 | this_Trif_3= ruleTrif ) ;
    public final EObject ruleT() throws RecognitionException {
        EObject current = null;

        EObject this_T1_0 = null;

        EObject this_T2_1 = null;

        EObject this_T3_2 = null;

        EObject this_Trif_3 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:893:28: ( (this_T1_0= ruleT1 | this_T2_1= ruleT2 | this_T3_2= ruleT3 | this_Trif_3= ruleTrif ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:894:1: (this_T1_0= ruleT1 | this_T2_1= ruleT2 | this_T3_2= ruleT3 | this_Trif_3= ruleTrif )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:894:1: (this_T1_0= ruleT1 | this_T2_1= ruleT2 | this_T3_2= ruleT3 | this_Trif_3= ruleTrif )
            int alt7=4;
            switch ( input.LA(1) ) {
            case RULE_TVAR:
                {
                alt7=1;
                }
                break;
            case 25:
                {
                alt7=2;
                }
                break;
            case 32:
                {
                alt7=3;
                }
                break;
            case RULE_ID:
                {
                alt7=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;
            }

            switch (alt7) {
                case 1 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:895:2: this_T1_0= ruleT1
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTAccess().getT1ParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleT1_in_ruleT1891);
                    this_T1_0=ruleT1();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_T1_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:908:2: this_T2_1= ruleT2
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTAccess().getT2ParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleT2_in_ruleT1921);
                    this_T2_1=ruleT2();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_T2_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:921:2: this_T3_2= ruleT3
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTAccess().getT3ParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleT3_in_ruleT1951);
                    this_T3_2=ruleT3();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_T3_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:934:2: this_Trif_3= ruleTrif
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getTAccess().getTrifParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleTrif_in_ruleT1981);
                    this_Trif_3=ruleTrif();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Trif_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleT"


    // $ANTLR start "entryRuleT1"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:953:1: entryRuleT1 returns [EObject current=null] : iv_ruleT1= ruleT1 EOF ;
    public final EObject entryRuleT1() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleT1 = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:954:2: (iv_ruleT1= ruleT1 EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:955:2: iv_ruleT1= ruleT1 EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getT1Rule()); 
            }
            pushFollow(FOLLOW_ruleT1_in_entryRuleT12016);
            iv_ruleT1=ruleT1();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleT1; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleT12026); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleT1"


    // $ANTLR start "ruleT1"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:962:1: ruleT1 returns [EObject current=null] : ( ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )* ) ;
    public final EObject ruleT1() throws RecognitionException {
        EObject current = null;

        Token lv_p_0_0=null;
        Token otherlv_1=null;
        EObject lv_c_2_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:965:28: ( ( ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )* ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:966:1: ( ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )* )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:966:1: ( ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )* )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:966:2: ( (lv_p_0_0= RULE_TVAR ) ) (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )*
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:966:2: ( (lv_p_0_0= RULE_TVAR ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:967:1: (lv_p_0_0= RULE_TVAR )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:967:1: (lv_p_0_0= RULE_TVAR )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:968:3: lv_p_0_0= RULE_TVAR
            {
            lv_p_0_0=(Token)match(input,RULE_TVAR,FOLLOW_RULE_TVAR_in_ruleT12068); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_p_0_0, grammarAccess.getT1Access().getPTvarTerminalRuleCall_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getT1Rule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"p",
                      		lv_p_0_0, 
                      		"tvar");
              	    
            }

            }


            }

            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:984:2: (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==31) ) {
                    int LA8_2 = input.LA(2);

                    if ( (synpred16_InternalMyDsl()) ) {
                        alt8=1;
                    }


                }


                switch (alt8) {
            	case 1 :
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:984:4: otherlv_1= '->' ( (lv_c_2_0= ruleT ) )
            	    {
            	    otherlv_1=(Token)match(input,31,FOLLOW_31_in_ruleT12086); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_1, grammarAccess.getT1Access().getHyphenMinusGreaterThanSignKeyword_1_0());
            	          
            	    }
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:988:1: ( (lv_c_2_0= ruleT ) )
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:989:1: (lv_c_2_0= ruleT )
            	    {
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:989:1: (lv_c_2_0= ruleT )
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:990:3: lv_c_2_0= ruleT
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getT1Access().getCTParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleT_in_ruleT12107);
            	    lv_c_2_0=ruleT();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getT1Rule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"c",
            	              		lv_c_2_0, 
            	              		"T");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleT1"


    // $ANTLR start "entryRuleT2"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1014:1: entryRuleT2 returns [EObject current=null] : iv_ruleT2= ruleT2 EOF ;
    public final EObject entryRuleT2() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleT2 = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1015:2: (iv_ruleT2= ruleT2 EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1016:2: iv_ruleT2= ruleT2 EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getT2Rule()); 
            }
            pushFollow(FOLLOW_ruleT2_in_entryRuleT22145);
            iv_ruleT2=ruleT2();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleT2; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleT22155); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleT2"


    // $ANTLR start "ruleT2"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1023:1: ruleT2 returns [EObject current=null] : (otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )* ) ;
    public final EObject ruleT2() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        EObject lv_p1_1_0 = null;

        EObject lv_c1_4_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1026:28: ( (otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )* ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1027:1: (otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )* )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1027:1: (otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )* )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1027:3: otherlv_0= '(' ( (lv_p1_1_0= ruleT ) ) otherlv_2= ')' (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )*
            {
            otherlv_0=(Token)match(input,25,FOLLOW_25_in_ruleT22192); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getT2Access().getLeftParenthesisKeyword_0());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1031:1: ( (lv_p1_1_0= ruleT ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1032:1: (lv_p1_1_0= ruleT )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1032:1: (lv_p1_1_0= ruleT )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1033:3: lv_p1_1_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getT2Access().getP1TParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleT22213);
            lv_p1_1_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getT2Rule());
              	        }
                     		set(
                     			current, 
                     			"p1",
                      		lv_p1_1_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,26,FOLLOW_26_in_ruleT22225); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getT2Access().getRightParenthesisKeyword_2());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1053:1: (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==31) ) {
                    int LA9_2 = input.LA(2);

                    if ( (synpred17_InternalMyDsl()) ) {
                        alt9=1;
                    }


                }


                switch (alt9) {
            	case 1 :
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1053:3: otherlv_3= '->' ( (lv_c1_4_0= ruleT ) )
            	    {
            	    otherlv_3=(Token)match(input,31,FOLLOW_31_in_ruleT22238); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getT2Access().getHyphenMinusGreaterThanSignKeyword_3_0());
            	          
            	    }
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1057:1: ( (lv_c1_4_0= ruleT ) )
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1058:1: (lv_c1_4_0= ruleT )
            	    {
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1058:1: (lv_c1_4_0= ruleT )
            	    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1059:3: lv_c1_4_0= ruleT
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getT2Access().getC1TParserRuleCall_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleT_in_ruleT22259);
            	    lv_c1_4_0=ruleT();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getT2Rule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"c1",
            	              		lv_c1_4_0, 
            	              		"T");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleT2"


    // $ANTLR start "entryRuleT3"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1083:1: entryRuleT3 returns [EObject current=null] : iv_ruleT3= ruleT3 EOF ;
    public final EObject entryRuleT3() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleT3 = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1084:2: (iv_ruleT3= ruleT3 EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1085:2: iv_ruleT3= ruleT3 EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getT3Rule()); 
            }
            pushFollow(FOLLOW_ruleT3_in_entryRuleT32297);
            iv_ruleT3=ruleT3();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleT3; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleT32307); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleT3"


    // $ANTLR start "ruleT3"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1092:1: ruleT3 returns [EObject current=null] : (otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) ) ) ;
    public final EObject ruleT3() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_var_1_0=null;
        EObject lv_t_2_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1095:28: ( (otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1096:1: (otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1096:1: (otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1096:3: otherlv_0= 'forall' ( (lv_var_1_0= RULE_TVAR ) ) ( (lv_t_2_0= ruleT ) )
            {
            otherlv_0=(Token)match(input,32,FOLLOW_32_in_ruleT32344); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getT3Access().getForallKeyword_0());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1100:1: ( (lv_var_1_0= RULE_TVAR ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1101:1: (lv_var_1_0= RULE_TVAR )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1101:1: (lv_var_1_0= RULE_TVAR )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1102:3: lv_var_1_0= RULE_TVAR
            {
            lv_var_1_0=(Token)match(input,RULE_TVAR,FOLLOW_RULE_TVAR_in_ruleT32361); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_var_1_0, grammarAccess.getT3Access().getVarTvarTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getT3Rule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"var",
                      		lv_var_1_0, 
                      		"tvar");
              	    
            }

            }


            }

            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1118:2: ( (lv_t_2_0= ruleT ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1119:1: (lv_t_2_0= ruleT )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1119:1: (lv_t_2_0= ruleT )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1120:3: lv_t_2_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getT3Access().getTTParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleT32387);
            lv_t_2_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getT3Rule());
              	        }
                     		set(
                     			current, 
                     			"t",
                      		lv_t_2_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleT3"


    // $ANTLR start "entryRuleTypeDich"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1144:1: entryRuleTypeDich returns [EObject current=null] : iv_ruleTypeDich= ruleTypeDich EOF ;
    public final EObject entryRuleTypeDich() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeDich = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1145:2: (iv_ruleTypeDich= ruleTypeDich EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1146:2: iv_ruleTypeDich= ruleTypeDich EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTypeDichRule()); 
            }
            pushFollow(FOLLOW_ruleTypeDich_in_entryRuleTypeDich2423);
            iv_ruleTypeDich=ruleTypeDich();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTypeDich; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTypeDich2433); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTypeDich"


    // $ANTLR start "ruleTypeDich"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1153:1: ruleTypeDich returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) ) ) ;
    public final EObject ruleTypeDich() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        EObject lv_type_2_0 = null;


         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1156:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1157:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1157:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1157:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_type_2_0= ruleT ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1157:2: ( (lv_name_0_0= RULE_ID ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1158:1: (lv_name_0_0= RULE_ID )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1158:1: (lv_name_0_0= RULE_ID )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1159:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTypeDich2475); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_0_0, grammarAccess.getTypeDichAccess().getNameIDTerminalRuleCall_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getTypeDichRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_0_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,19,FOLLOW_19_in_ruleTypeDich2492); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getTypeDichAccess().getEqualsSignKeyword_1());
                  
            }
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1179:1: ( (lv_type_2_0= ruleT ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1180:1: (lv_type_2_0= ruleT )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1180:1: (lv_type_2_0= ruleT )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1181:3: lv_type_2_0= ruleT
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getTypeDichAccess().getTypeTParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleT_in_ruleTypeDich2513);
            lv_type_2_0=ruleT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getTypeDichRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_2_0, 
                      		"T");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTypeDich"


    // $ANTLR start "entryRuleTrif"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1205:1: entryRuleTrif returns [EObject current=null] : iv_ruleTrif= ruleTrif EOF ;
    public final EObject entryRuleTrif() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTrif = null;


        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1206:2: (iv_ruleTrif= ruleTrif EOF )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1207:2: iv_ruleTrif= ruleTrif EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTrifRule()); 
            }
            pushFollow(FOLLOW_ruleTrif_in_entryRuleTrif2549);
            iv_ruleTrif=ruleTrif();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTrif; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTrif2559); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTrif"


    // $ANTLR start "ruleTrif"
    // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1214:1: ruleTrif returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ;
    public final EObject ruleTrif() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;

         enterRule(); 
            
        try {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1217:28: ( ( (otherlv_0= RULE_ID ) ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1218:1: ( (otherlv_0= RULE_ID ) )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1218:1: ( (otherlv_0= RULE_ID ) )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1219:1: (otherlv_0= RULE_ID )
            {
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1219:1: (otherlv_0= RULE_ID )
            // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1220:3: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {
               
              		  /* */ 
              		
            }
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getTrifRule());
              	        }
                      
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleTrif2607); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_0, grammarAccess.getTrifAccess().getNomeTypeDichCrossReference_0()); 
              	
            }

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTrif"

    // $ANTLR start synpred16_InternalMyDsl
    public final void synpred16_InternalMyDsl_fragment() throws RecognitionException {   
        Token otherlv_1=null;
        EObject lv_c_2_0 = null;


        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:984:4: (otherlv_1= '->' ( (lv_c_2_0= ruleT ) ) )
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:984:4: otherlv_1= '->' ( (lv_c_2_0= ruleT ) )
        {
        otherlv_1=(Token)match(input,31,FOLLOW_31_in_synpred16_InternalMyDsl2086); if (state.failed) return ;
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:988:1: ( (lv_c_2_0= ruleT ) )
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:989:1: (lv_c_2_0= ruleT )
        {
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:989:1: (lv_c_2_0= ruleT )
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:990:3: lv_c_2_0= ruleT
        {
        if ( state.backtracking==0 ) {
           
          	        newCompositeNode(grammarAccess.getT1Access().getCTParserRuleCall_1_1_0()); 
          	    
        }
        pushFollow(FOLLOW_ruleT_in_synpred16_InternalMyDsl2107);
        lv_c_2_0=ruleT();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }
    }
    // $ANTLR end synpred16_InternalMyDsl

    // $ANTLR start synpred17_InternalMyDsl
    public final void synpred17_InternalMyDsl_fragment() throws RecognitionException {   
        Token otherlv_3=null;
        EObject lv_c1_4_0 = null;


        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1053:3: (otherlv_3= '->' ( (lv_c1_4_0= ruleT ) ) )
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1053:3: otherlv_3= '->' ( (lv_c1_4_0= ruleT ) )
        {
        otherlv_3=(Token)match(input,31,FOLLOW_31_in_synpred17_InternalMyDsl2238); if (state.failed) return ;
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1057:1: ( (lv_c1_4_0= ruleT ) )
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1058:1: (lv_c1_4_0= ruleT )
        {
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1058:1: (lv_c1_4_0= ruleT )
        // ../systemF/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:1059:3: lv_c1_4_0= ruleT
        {
        if ( state.backtracking==0 ) {
           
          	        newCompositeNode(grammarAccess.getT2Access().getC1TParserRuleCall_3_1_0()); 
          	    
        }
        pushFollow(FOLLOW_ruleT_in_synpred17_InternalMyDsl2259);
        lv_c1_4_0=ruleT();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }
    }
    // $ANTLR end synpred17_InternalMyDsl

    // Delegated rules

    public final boolean synpred17_InternalMyDsl() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred17_InternalMyDsl_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred16_InternalMyDsl() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred16_InternalMyDsl_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


 

    public static final BitSet FOLLOW_ruleProg_in_entryRuleProg81 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleProg91 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleImport_in_ruleProg137 = new BitSet(new long[]{0x0000000000032000L});
    public static final BitSet FOLLOW_13_in_ruleProg151 = new BitSet(new long[]{0x0000000000008020L});
    public static final BitSet FOLLOW_ruleTypeDich_in_ruleProg173 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleProg185 = new BitSet(new long[]{0x0000000000008020L});
    public static final BitSet FOLLOW_15_in_ruleProg199 = new BitSet(new long[]{0x0000000000030000L});
    public static final BitSet FOLLOW_16_in_ruleProg214 = new BitSet(new long[]{0x0000000000008020L});
    public static final BitSet FOLLOW_ruleDich_in_ruleProg236 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleProg248 = new BitSet(new long[]{0x0000000000008020L});
    public static final BitSet FOLLOW_15_in_ruleProg262 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleProg276 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleProg297 = new BitSet(new long[]{0x0000000000008000L});
    public static final BitSet FOLLOW_15_in_ruleProg309 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport345 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleImport355 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_18_in_ruleImport392 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleImport409 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDich_in_entryRuleDich450 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDich460 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDich502 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleDich519 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleDich540 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNrif_in_entryRuleNrif576 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNrif586 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleNrif634 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm669 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTerm679 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleVar_in_ruleTerm729 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbs_in_ruleTerm759 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleApp_in_ruleTerm789 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUq_in_ruleTerm819 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTapp_in_ruleTerm849 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNrif_in_ruleTerm879 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLet_in_ruleTerm909 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLet_in_entryRuleLet944 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLet954 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_ruleLet991 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_RULE_VARIABLE_in_ruleLet1008 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleLet1025 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_ruleLet1046 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleLet1058 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleLet1079 = new BitSet(new long[]{0x0000000000400000L});
    public static final BitSet FOLLOW_22_in_ruleLet1091 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleLet1112 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleVar_in_entryRuleVar1148 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleVar1158 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_VARIABLE_in_ruleVar1199 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbs_in_entryRuleAbs1239 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbs1249 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_ruleAbs1286 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_RULE_VARIABLE_in_ruleAbs1303 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_ruleAbs1320 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_ruleAbs1341 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_24_in_ruleAbs1353 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleAbs1374 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleApp_in_entryRuleApp1410 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleApp1420 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_ruleApp1457 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleApp1478 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_ruleApp1490 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleApp1511 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUq_in_entryRuleUq1547 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleUq1557 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_ruleUq1594 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_RULE_TVAR_in_ruleUq1611 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_28_in_ruleUq1628 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleUq1649 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTapp_in_entryRuleTapp1685 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTapp1695 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleTapp1740 = new BitSet(new long[]{0x000000002A900060L});
    public static final BitSet FOLLOW_ruleTerm_in_ruleTapp1762 = new BitSet(new long[]{0x0000000040000000L});
    public static final BitSet FOLLOW_30_in_ruleTapp1774 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_ruleTapp1795 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT_in_entryRuleT1831 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleT1841 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT1_in_ruleT1891 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT2_in_ruleT1921 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT3_in_ruleT1951 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTrif_in_ruleT1981 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleT1_in_entryRuleT12016 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleT12026 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_TVAR_in_ruleT12068 = new BitSet(new long[]{0x0000000080000002L});
    public static final BitSet FOLLOW_31_in_ruleT12086 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_ruleT12107 = new BitSet(new long[]{0x0000000080000002L});
    public static final BitSet FOLLOW_ruleT2_in_entryRuleT22145 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleT22155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_ruleT22192 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_ruleT22213 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_ruleT22225 = new BitSet(new long[]{0x0000000080000002L});
    public static final BitSet FOLLOW_31_in_ruleT22238 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_ruleT22259 = new BitSet(new long[]{0x0000000080000002L});
    public static final BitSet FOLLOW_ruleT3_in_entryRuleT32297 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleT32307 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleT32344 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_RULE_TVAR_in_ruleT32361 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_ruleT32387 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeDich_in_entryRuleTypeDich2423 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTypeDich2433 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTypeDich2475 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_ruleTypeDich2492 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_ruleTypeDich2513 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTrif_in_entryRuleTrif2549 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTrif2559 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleTrif2607 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_31_in_synpred16_InternalMyDsl2086 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_synpred16_InternalMyDsl2107 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_31_in_synpred17_InternalMyDsl2238 = new BitSet(new long[]{0x00000001020000A0L});
    public static final BitSet FOLLOW_ruleT_in_synpred17_InternalMyDsl2259 = new BitSet(new long[]{0x0000000000000002L});

}